/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.modelo;

import br.com.foxinline.enums.TipoProcesso;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.*;

/**
 *
 * @author ely
 */
@Entity
public class Processo implements Serializable {

    @Id
    @SequenceGenerator(sequenceName = "seq_processo", name = "seq_processo", allocationSize = 1)
    @GeneratedValue(generator = "seq_processo", strategy = GenerationType.SEQUENCE)
    private Long id;
    @Enumerated(EnumType.STRING)
    private TipoProcesso tipoProcesso;
    @OneToMany(cascade = {CascadeType.ALL}, orphanRemoval = true)
    private List<Anexo> anexos;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataProcesso;
    private String objeto;
    private Integer numeroRequisicao;
    private Integer numeroServico;
    private Integer numeroProcessoAdministrativo;
    private Integer numeroNotaEmpenho;
    private BigDecimal valorLiquidacao;
    @OneToOne
    private Usuario usuario;
    @Version
    private int versao;

    public Processo() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public TipoProcesso getTipoProcesso() {
        return tipoProcesso;
    }

    public void setTipoProcesso(TipoProcesso tipoProcesso) {
        this.tipoProcesso = tipoProcesso;
    }

    public List<Anexo> getAnexos() {
        return anexos;
    }

    public void setAnexos(List<Anexo> anexos) {
        this.anexos = anexos;
    }

    public Date getDataProcesso() {
        return dataProcesso;
    }

    public void setDataProcesso(Date dataProcesso) {
        this.dataProcesso = dataProcesso;
    }

    public String getObjeto() {
        return objeto;
    }

    public void setObjeto(String objeto) {
        this.objeto = objeto;
    }

    public Integer getNumeroRequisicao() {
        return numeroRequisicao;
    }

    public void setNumeroRequisicao(Integer numeroRequisicao) {
        this.numeroRequisicao = numeroRequisicao;
    }

    public Integer getNumeroServico() {
        return numeroServico;
    }

    public void setNumeroServico(Integer numeroServico) {
        this.numeroServico = numeroServico;
    }

    public Integer getNumeroProcessoAdministrativo() {
        return numeroProcessoAdministrativo;
    }

    public void setNumeroProcessoAdministrativo(Integer numeroProcessoAdministrativo) {
        this.numeroProcessoAdministrativo = numeroProcessoAdministrativo;
    }

    public Integer getNumeroNotaEmpenho() {
        return numeroNotaEmpenho;
    }

    public void setNumeroNotaEmpenho(Integer numeroNotaEmpenho) {
        this.numeroNotaEmpenho = numeroNotaEmpenho;
    }

    public BigDecimal getValorLiquidacao() {
        return valorLiquidacao;
    }

    public void setValorLiquidacao(BigDecimal valorLiquidacao) {
        this.valorLiquidacao = valorLiquidacao;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public int getVersao() {
        return versao;
    }

    public void setVersao(int versao) {
        this.versao = versao;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Processo other = (Processo) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        if (this.tipoProcesso != other.tipoProcesso) {
            return false;
        }
        if (this.anexos != other.anexos && (this.anexos == null || !this.anexos.equals(other.anexos))) {
            return false;
        }
        if (this.dataProcesso != other.dataProcesso && (this.dataProcesso == null || !this.dataProcesso.equals(other.dataProcesso))) {
            return false;
        }
        if ((this.objeto == null) ? (other.objeto != null) : !this.objeto.equals(other.objeto)) {
            return false;
        }
        if (this.numeroRequisicao != other.numeroRequisicao && (this.numeroRequisicao == null || !this.numeroRequisicao.equals(other.numeroRequisicao))) {
            return false;
        }
        if (this.numeroServico != other.numeroServico && (this.numeroServico == null || !this.numeroServico.equals(other.numeroServico))) {
            return false;
        }
        if (this.numeroProcessoAdministrativo != other.numeroProcessoAdministrativo && (this.numeroProcessoAdministrativo == null || !this.numeroProcessoAdministrativo.equals(other.numeroProcessoAdministrativo))) {
            return false;
        }
        if (this.numeroNotaEmpenho != other.numeroNotaEmpenho && (this.numeroNotaEmpenho == null || !this.numeroNotaEmpenho.equals(other.numeroNotaEmpenho))) {
            return false;
        }
        if (this.valorLiquidacao != other.valorLiquidacao && (this.valorLiquidacao == null || !this.valorLiquidacao.equals(other.valorLiquidacao))) {
            return false;
        }
        if (this.usuario != other.usuario && (this.usuario == null || !this.usuario.equals(other.usuario))) {
            return false;
        }
        if (this.versao != other.versao) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 83 * hash + (this.id != null ? this.id.hashCode() : 0);
        hash = 83 * hash + (this.tipoProcesso != null ? this.tipoProcesso.hashCode() : 0);
        hash = 83 * hash + (this.anexos != null ? this.anexos.hashCode() : 0);
        hash = 83 * hash + (this.dataProcesso != null ? this.dataProcesso.hashCode() : 0);
        hash = 83 * hash + (this.objeto != null ? this.objeto.hashCode() : 0);
        hash = 83 * hash + (this.numeroRequisicao != null ? this.numeroRequisicao.hashCode() : 0);
        hash = 83 * hash + (this.numeroServico != null ? this.numeroServico.hashCode() : 0);
        hash = 83 * hash + (this.numeroProcessoAdministrativo != null ? this.numeroProcessoAdministrativo.hashCode() : 0);
        hash = 83 * hash + (this.numeroNotaEmpenho != null ? this.numeroNotaEmpenho.hashCode() : 0);
        hash = 83 * hash + (this.valorLiquidacao != null ? this.valorLiquidacao.hashCode() : 0);
        hash = 83 * hash + (this.usuario != null ? this.usuario.hashCode() : 0);
        hash = 83 * hash + this.versao;
        return hash;
    }

    @Override
    public String toString() {
        return "Processo{" + "id=" + id + ", tipoProcesso=" + tipoProcesso + ", anexos=" + anexos + ", dataProcesso=" + dataProcesso + ", objeto=" + objeto + ", numeroRequisicao=" + numeroRequisicao + ", numeroServico=" + numeroServico + ", numeroProcessoAdministrativo=" + numeroProcessoAdministrativo + ", numeroNotaEmpenho=" + numeroNotaEmpenho + ", valorLiquidacao=" + valorLiquidacao + ", usuario=" + usuario + '}';
    }
}
